package com.it13.utils.dateutil;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 日期工具类
 * @author yzChen
 * @date 2013-7-27 上午9:49:19
 * <pre>
 *	desc:
 * </pre>
 */
public class DateUtil {
	// 格式化对象
	private static SimpleDateFormat sdf;
	
	/**
	 * 将当前日期转换为字符串
	 * @param dft 
	 * 		格式化类型
	 * @return
	 */
	public static String date2Str(DateFormatType dft) {
		return date2Str(new Date(), dft);
	}
	
	/**
	 * 将指定日期转换为字符串
	 * @param date
	 * @param dft
	 * @return
	 */
	public static String date2Str(Date date, DateFormatType dft) {
		sdf = new SimpleDateFormat(DateFormatType.getValue(dft));
		return sdf.format(date);
	}
	
	/**
	 * 将字符串转换为日期
	 * @param str 
	 * 		日期字符串
	 * @param dft 
	 * 		格式化类型
	 * @return
	 * @throws ParseException	
	 * 		转换异常
	 */
	public static Date str2Date(String str, DateFormatType dft) throws ParseException {
		sdf = new SimpleDateFormat(DateFormatType.getValue(dft));
		return sdf.parse(str);
	}

	
	/**
	 * 日期格式化类型
	 * @author yzChen
	 * @date 2013-7-27 上午10:38:27
	 * <pre>
	 * NONE: yyyyMMdd;
	 * SLASH: yyyy/MM/dd;
	 * BARS: yyyy-MM-dd;
	 * NONE_HMS: yyyyMMdd HH:mm:ss
	 * SLASH_HMS: yyyy/MM/dd HH:mm:ss
	 * SLASH_HMS: yyyy-MM-dd HH:mm:ss
	 * </pre>
	 */
	public static enum DateFormatType {
		NONE, SLASH, BARS, NONE_HMS, SLASH_HMS, BARS_HMS;
		
		// 根据类型枚举，保存对应字符串格式
		private static Map<DateFormatType, String> mapValue;
		
		/**
		 * 根据类型枚举，获取字符串格式
		 * @param key	
		 * 		枚举类型
		 * @return		
		 * 		格式字符串
		 */
		public static String getValue(DateFormatType key) {
			return initMapValue().get(key);
		}
		
		/**
		 * 初始化数据结构
		 * @return
		 */
		private static Map<DateFormatType, String> initMapValue() {
			if(null == mapValue) {
				mapValue = new HashMap<DateUtil.DateFormatType, String>();
				mapValue.put(NONE, "yyyyMMdd");
				mapValue.put(SLASH, "yyyy/MM/dd");
				mapValue.put(BARS, "yyyy-MM-dd");
				mapValue.put(NONE_HMS, "yyyyMMdd HH:mm:ss");
				mapValue.put(SLASH_HMS, "yyyy/MM/dd HH:mm:ss");
				mapValue.put(BARS_HMS, "yyyy-MM-dd HH:mm:ss");
			}
			return mapValue;
		}
		
	}
	
	
	
	
	
	
	
	
	
	public static void main(String[] args) {
		System.out.println(DateUtil.date2Str(DateFormatType.BARS));
	}
	
}
